Worksheet for Session 3: Data Visualisation and ggplot2

This worksheet will guide you through data visualisation tasks using the mtcars dataset. Please follow the instructions for each task and try to solve them on your own before checking the solution.


Task 1: Explore the mtcars Dataset

Before we begin visualising, explore the mtcars dataset using the following functions: 1. View the first 6 rows using head(). 2. Get the structure of the dataset using str(). 3. Summarise the dataset using summary().

Task 1 R code
# Explore the mtcars dataset
head(mtcars)         # View the first 6 rows
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
str(mtcars)          # View the structure of the dataset
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
summary(mtcars)      # Summarise the dataset
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Task 2: Create Basic Plots in Base R

2.1 Scatter Plot in Base R

Create a scatter plot showing the relationship between mpg (miles per gallon) and hp (horsepower).

Task 2.1 R code
# Scatter plot of mpg vs hp
plot(mtcars$mpg, mtcars$hp,
     main = "Scatter Plot of MPG vs Horsepower",
     xlab = "Miles Per Gallon (mpg)",
     ylab = "Horsepower (hp)",
     col = "blue", pch = 19)

2.2 Histogram in Base R

Create a histogram of the mpg variable to visualise its distribution.

Task 2.2 R code
# Histogram of mpg
hist(mtcars$mpg,
     main = "Histogram of Miles Per Gallon",
     xlab = "Miles Per Gallon (mpg)",
     col = "lightgreen", border = "black")

Task 3: Visualise Data with ggplot2

3.1 Scatter Plot in ggplot2

Using ggplot2, create a scatter plot of mpg vs hp. Colour the points by the number of cylinders (cyl).

Task 3.1 R code
library("ggplot2")

# Scatter plot of mpg vs hp coloured by number of cylinders
ggplot(data = mtcars, aes(x = mpg, y = hp, color = factor(cyl))) +
  geom_point(size = 3) +
  labs(title = "MPG vs Horsepower Coloured by Cylinders",
       x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
  theme_bw()

3.2 Bar Plot in ggplot2

Create a bar plot showing the frequency of different numbers of cylinders (cyl).

Task 3.2 R code
# Bar plot of number of cylinders
ggplot(data = mtcars, aes(x = factor(cyl))) +
  geom_bar(fill = "lightblue") +
  labs(title = "Bar Plot of Cylinder Counts", x = "Number of Cylinders", y = "Count") +
  theme_bw()

3.3 Faceted Plot in ggplot2

Create a faceted scatter plot of mpg vs hp. Facet the plot by the number of cylinders (cyl).

Task 3.3 R code
# Faceted scatter plot of mpg vs hp by number of cylinders
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
  geom_point(color = "blue") +
  facet_wrap(~factor(cyl)) +
  labs(title = "MPG vs Horsepower Faceted by Cylinders", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
  theme_bw()

Task 4: Advanced Customisation in ggplot2

4.1 Customise Themes, Titles, and Labels

Create a scatter plot of mpg vs wt (weight) and customise the plot by: - Adding a title and axis labels. - Applying a custom theme (e.g., theme_classic()). - Using a custom colour palette for the points.

Task 4.1 R code
# Scatter plot of mpg vs weight with customisation
ggplot(data = mtcars, aes(x = mpg, y = wt, color = factor(gear))) +
  geom_point(size = 3) +
  labs(title = "MPG vs Weight by Number of Gears",
       x = "Miles Per Gallon (mpg)", y = "Weight (1000 lbs)") +
  scale_color_brewer(palette = "Set1") +
  theme_classic()

Task 5: Adding Annotations and Multiple Layers

5.1 Add Annotations

Create a scatter plot of mpg vs hp. Add an annotation to highlight points where hp > 200 with a text label.

Task 5.1 R code
# Scatter plot with annotation
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
  geom_point(color = "blue") +
  labs(title = "MPG vs Horsepower with Annotation", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
  annotate("text", x = 15, y = 300, label = "High HP", color = "red", size = 5) +
  theme_bw()

5.2 Multiple Layers

Create a scatter plot of mpg vs hp. Add a linear regression line to the plot.

Task 5.2 R code
# Scatter plot with regression line
ggplot(data = mtcars, aes(x = mpg, y = hp)) +
  geom_point(color = "blue", alpha = 0.6) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Scatter Plot of MPG vs Horsepower with Regression Line", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'

Task 6: Interactive Plots with plotly

6.1 Create an Interactive Plot

Convert your scatter plot of mpg vs hp into an interactive plot using the plotly package.

Task 6.1 R code
library("plotly")
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Create a ggplot2 scatter plot
p <- ggplot(data = mtcars, aes(x = mpg, y = hp)) +
  geom_point(color = "blue") +
  labs(title = "Interactive Scatter Plot of MPG vs Horsepower", x = "Miles Per Gallon (mpg)", y = "Horsepower (hp)") +
  theme_bw()

# Convert to interactive plot using ggplotly
ggplotly(p)

Summary

In this worksheet, you’ve practiced: - Creating basic visualisations using base R and ggplot2. - Customising visualisations with themes, labels, and annotations. - Creating advanced plots with faceting, annotations, and multiple layers. - Converting static plots to interactive plots using plotly.